#include "init_spdlog.h"
#include <spdlog/spdlog.h>
#include <spdlog/sinks/daily_file_sink.h>

#include <filesystem>
namespace fs = std::filesystem;

void init_spdlog(const char* path, spdlog::level::level_enum level)
{                                                                                     
    auto abs_log_filename = fs::absolute(".");                                        
    // 线程安全的按日期切分，每天00:00                                                
    auto daily = spdlog::daily_logger_mt("daily", path, 0, 0, false, 30);
                                                                                      
    // 设置日志格式                                                                   
    spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e][%l][%s:%#]%v");                       
    spdlog::set_default_logger(daily);                                                
                                                                                      
    // 日志等级，运行时改变                                                           
    spdlog::set_level(level);
                                                                                      
                                                                                      
    // 设置日志刷新频率，每秒向磁盘刷一次                                             
    spdlog::flush_every(std::chrono::seconds(3));                                     
                                                                                      
    // 日志等级>=error 则立刻写入磁盘                                                 
                                                                                      
    spdlog::flush_on(spdlog::level::level_enum::critical);
                                                                                      
    // signal(SIGINT, signo);                                                         
    // signal(SIGABRT, signo);                                                        
    // signal(SIGILL, signo);                                                         
    // signal(SIGTERM, signo);                                                        
    // signal(SIGSEGV, signo);                                                        
    // signal(SIGQUIT, signo);                                                        
                                                                                      
}                                                                                     

